4. 变量

4.1. 什么是变量

  • 程序=数据结构+算法

  • 变量就是可以重复使用的一个量,或者一个代号,我们可以把变量理解成是计算机中的一个存储单元,用来专门 存放数据,但我们需要对这个单元进行命名,这就是变量的名称,同样,变量存储的数据的类型,也被叫做变量的类型

4.2. 变量声明

变量在使用之前必须声明,即告诉系统开辟出内存来,并把相应内容放入对应内存。
变量声明一般有三种方式:

  • var_name = var_value

  • var1 = var2 = var3 = var_value

  • var1, var2, var3 = v1, v2, v3

# 定义变量gae,把18放入变量age中
age = 18
print(age)
print(18)

# 给age1, age2, age3 放入同样一个内容或值
age1 = age2 = age3 = 18
print(age1)
print(age2)
print(age3)

# 一行内给多个变量赋值
age4, age5, age6 = 12, 21, 45
print(age4)
print(age5)
print(age6)

结果如下:

18
18
18
18
18
12
21
45

Python中交换两个变量可以使用 a, b = b, a 来进行交换

4.3. 变量命名的规则

  • 大小写敏感, 即同样内容,大写和小写不是一个

  • 变量命名可以包含数字,大小写字母,下划线或者更多,但是我们不推荐除了前三种内容之外的符号

  • 数字不可以打头

    • 4man, 5for 是不可以的

    • man4, for5是可以的

  • 一般在python中,以下划线开头的内容具有特殊含义,不建议使用

    • 比如 _age, _name,理论可以,但强烈不推荐,包括但不限于一个下划线开头和两个连续下划线开头

  • 大小写不一样,俗称大小写敏感

    • ForMan 跟 forMan不是一个变量名称

  • 不能使用关键字, 即系统自己使用的变量或者命令

  • 系统中定义的有特定名称的功能或者具有通用含义的单词

    • 此条没有具体规定,常用后会了解

    • 例如 print, help, len

4.4. 推荐命名方式

  • 使用具有固定含义的英文单词或者缩写, srv=server skt=socket,一般以posix命名规则为主

  • 驼峰命名法

    • 名称以单词自动连接,且每个单词首字母大写

      • 大驼峰,每个单词第一个字母均大写

        • 在Python中给类命名使用此法

        • MyFirstLove, IntOne

      • 小驼峰,类似大驼峰,但第一个字母小写

        • 在Python中一般给普通变量或者函数命名

        • myFirstLove, intOne

      • linux系列常用的命名规范

        • 多个单词用下划线链接

        • 单词全部小写

        • my_first_love, int_one

  • python中,变量命名使用linux中变量习惯写法,类命名使用大驼峰

4.5. Python目前所有关键字查看方法

通过以下方法可以查看Python中所有的关键字

# 查看关键字的方法
import keyword #引入关键字模块
# 打印出系统全部关键字
print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

4.6. 变量类型

  • 严格意义上讲,Python只有一个类型

  • 宽泛的讲,Python标准数据一共六种

    • 数字类型Number

    • 字符串类型str

    • 列表list

    • 元组tuple

    • 字典 Dictionary

    • 集合 set

  • None类型,也是一种特殊的类型

    • 表示什么都没有

    • 如果函数没有返回值,可以返回 None

    • 用来占位置

    • 用来解除变量绑定

# None 是一个独特的类型,表示什么都没有
a = None
print(a)
None

4.7. 变量类型的查看

如何判断一个变量的类型,一般有两种方式:

  • type: 可以直接查看任何一个变量的类型

  • isinstance: 判断一个变量是否是某个类型,如果被判断的类型是变量的类型的子类型,同样会返回True

a = 5.0 + 1j

# 打印出变量a的类型
print(type(a))

#判断a是否是complex类型,此处如果complex有子类型,也会返回True
isinstance(a, complex)

上述代码得到的结果是:

<class 'complex'>

True

4.8. Number数字类型

  • 数字类型没有大小限制

  • 基本不像C语言或者Java语言那种考虑数字的长度

  • 数字类型包括其他语言的所有数字相关类型,比如:

    • 整数

    • 小数/浮点数

    • 复数

4.8.1. 整数

  • 没有小数部分,表示个数的数字

  • 包括: 自然数,0,负自然数

  • 整数是分进制,常见进制有:

    • 二进制

      • 计算机常用

      • 是计算机唯一能直接理解的数字

      • 表示为0b开头的0,1代码

      • 例如 0b01101, 0b10001

    • 八进制

      • 不常用

      • 以0o开头的包含0-7的数字

    • 十六进制

      • 逢16进1

      • 其实是每四位二进制表示一位十六进制数

      • 包含0-9, a-f

      • 数字上以0x开头表示

    • 十进制

      • 18, 89, 178

age = 18
print(18)

age = 0b10010
print(age)

age = 0o102
print(age)

age = 0xff #十六进制ff表示二进制的1111 1111
print(age)
18
18
66
255

4.8.2. 各进制数字直接的转换

Python提供了相应的转换函数,可以把数字转换成想要的进制,此类函数包括:

  • int: 转换成十进制整数

  • bin:转换成二进制数

  • oct:转换成八进制

  • hex:转换成十六进制

# 不同进制之间的转换
a = 100
b = 0b10010
c = 0o100
d = 0xff
print(a,b,c,d)

# 二八,十六进制转十进制
print("二转10:", int(b))
print("八转10:", int(c))
print("十六转10:", int(d))

# 转二进制
print("八转2:", bin(b))
print("十转2:", bin(a))
print("十六转2:", bin(d))

# 转八进制用oct()
# 转十六进制用hex()

打印结果如下:

100 18 64 255
二转10: 18
八转10: 64
十六转10: 255
八转2: 0b10010
十转2: 0b1100100
十六转2: 0b11111111

4.8.3. 浮点数

  • 小数在计算机里称为浮点数

  • 计算机里边表示浮点数可以有条件省略,比如以下都表示小数:

    • 3.1415

    • 3.: 3.0的省略

    • 0.5

    • .5 : 0.5的省略

  • 科学计数法

    • 定义跟数学定义一致

    • 写法是用e/E后面跟整数表示10的指数

    • 176.23 == 1.7634e2

    • 0.876 == 8.76e-1

height = 156.34
print(height)

shili = .2
print(shili)

shili = 1.234E3  #使用科学计数法
print(shili) 

显示结果如下:

156.34
0.2
1234.0

4.8.4. 复数complex

  • 定义同数学定义一致,即表示一个由实部和虚部构成的数字

  • 虚部用j/J表示, 例如:

    • 5+3j

    • 3j

    • (3j)

a = 1 + 4J
print(a)

# 复数相加
b = a + 4j
print(b)
(1+4j)
(1+8j)

4.8.5. 布尔值

  • 表示真假的值

  • 只有两个值, True/False, 这是两个值,不需要引号,不是字符串

a = True
print(a)

b = False
print(b)
True
False
  • 布尔值可以跟数字直接操作

    • 此时True被看做数字1, False被看做数字0

#布尔值操作
age = 18 + True
print(age)

a = 18 * False
print(a)

输出结果如下:

19
0
  • 在需要逻辑值的地方,我们也可以使用数字来表示

    • 此时数字0被当做False

    • 其余的,包括负数,被当做True

if -10:
    print("负数是True")
    
if not 0:
    print("0是False")

输出结果如下:

负数是True
0是False 

4.9. 数据类型转换

  • 什么是数据类型转换?

    • 把一个数据类型转换为另一个数据类型,例如字符串转为数字

  • 为什么需要数据类型转换?

    • 因为不同的数据类型之间不能运算

  • 数据类型转换的形式?

    • 自动类型转换

    • 强制类型转换

4.9.1. 自动类型转换

# 自动类型转换
# 当两个不同的值进行运算时,结果会向更高的精度进行计算
# True ==> 整型 ==> 浮点 ==> 复数
a = 123
b = True  # 在和数字运算时 True转为数字1,False转为数字 0
# print(a+b)
# print(12.5+22)
# print(True+3.14)

4.9.2. 强制类型转换

python中的每个数据类型都有对应的方法,可以对数据类型进行转换

  • str() 可以把所有的其它数据类型转换为字符串类型

  • int() 字符串转数字类型时,如果字符串中时纯数字,可以转换

    • 其它容器类型不能转为数字int类型

  • float() 浮点类型的转换和int类型一样,不过转换的结果是浮点类型

  • bool() 可以把其它类型转换布尔类型的True或False

    • 总结,哪些情况转bool的结果是 False

    • '',0,0.0,False,[],{},(),set()

  • list() 列表

    • 数字类型是 非容器类型,不能转换为列表

    • 字符串 转换为列表时 会把字符串中的每一个字符当做列表的元素

    • 集合 可以转换为 list列表类型

    • 元组 可以转换为 list列表类型

    • 字典 可以转换为 list列表类型,只保留了字典中的键

  • tuple() 元组

    • 数字类型非容器类型,不能转换为元组

    • 其它容器类型的数据进行转换时,和列表一样

  • set() 集合

    • 数字类型 非容器类型,不能转换为集合

    • 字符串,列表,元组可以转为 集合结果是无序的

    • 字典转换为集合时,只保留了字典的键 key

  • dict() 字典

    • 数字类型 非容器类型,不能转换为字典

    • 字符串不能直接转换为 字典

    • 列表可以转换为字典,要求是一个二级列表,并且每个二级元素只能有两个值

    • 元组可以转换为字典,要求是一个二级元组,并且每个二级元素只能有两个值

4.9.3. Python的二进制

python并没有二进制的类型,数字可以转换成二进制数字,但在python内被当做 byte类型或者字符串类型处理。

为了弥补二进制的处理带来的问题,python有个单独的模块struct用来单独处理二进制 相关的操作。

Python的struct操作二进制